package db_operations;

import java.sql.SQLException;

import Beans.Artista;


public interface GestioneArtisti {
	
//AGGIORNAMENTI
	
	/**
	 * inserisce un artista nel DB
	 * @param Artista: l'artista da inserire
	 * @throws SQLException
	 */
	public void aggiungiArtista(Artista a) throws SQLException;
	
	
	/**
	 * modifica un artista
	 * @param Artista a
	 * @throws SQLException
	 */
	public void modificaArtista(Artista a) throws SQLException;
	
	
	/**
	 * elimina un artista dal DB
	 * NOTA BENE: eliminazione logica: spostamento dell'entry nella tabella "deleted"
	 * @param Artista a
	 * @throws SQLException
	 */
	public void eliminaArtista(Artista a) throws SQLException;
	
	
	
	//RICERCA

	/**
	 * restituisce l'artista con l'id specificato
	 * @param int id
	 * @throws SQLException
	 */
	public Artista getArtista(int id) throws SQLException;
	
	
	/**
	 * restituisce la lista di tutti gli artisti presenti nel DB
	 * @return Artista[]
	 * @throws SQLException
	 */
	public Artista[] getListaArtisti() throws SQLException;
	
	
	/**
	 * restituisce un artista nella lista deleted, se presente
	 * @param id
	 * @return Artista
	 * @throws SQLException
	 */
	public Artista getArtistaDeleted(int id) throws SQLException;
	
	
	/**
	 * restituisce la lista di tutti gli artisti eliminati
	 * @return Artista[]
	 * @throws SQLException
	 */
	public Artista[] getListaArtistiDeleted() throws SQLException;
	
	
	/**
	 * ricerca artista su diversi parametri.
	 * NOTA: le locazioni degli array nomiParametri e valoriParametri devono essere 
	 * 		correlate: se nomiParametri[i] contiene "Nazione", 
	 * 					valoriParamentri[i] contiene il nome della nazione.
	 * @param nomiParametri: contiene la lista dei nomi degli attributi sui quali
	 * 			effettuare la ricerca. Ad esempio "Nazione", "Città" ecc..
	 * @param valoriParametri: contiene la lista dei valori degli attributi sui quali
	 * 			effettuare la ricerca. Ad esempio "Italia", "Milano" ecc...
	 * @return Artista[]
	 * @throws SQLException
	 */
	public Artista[] ricercaArtista(String[] nomiParametri, String[] valoriParametri) throws SQLException;
	
	
	/**
	 * ricerca artista su diversi parametri. Da utilizzare se i parametri non sono tutti stringhe.
	 * NOTA: le locazioni degli array nomiParametri e valoriParametri devono essere 
	 * 		correlate: se nomiParametri[i] contiene "Nazione", 
	 * 					valoriParamentri[i] contiene il nome della nazione.
	 * @param nomiParametri: contiene la lista dei nomi degli attributi sui quali
	 * 			effettuare la ricerca. Ad esempio "Nazione", "Città" ecc..
	 * @param valoriParametri: contiene la lista dei valori degli attributi sui quali
	 * 			effettuare la ricerca. Ad esempio "Italia", "Milano" ecc...
	 * @param tipiParametri: array contenente nomi di tipo: se tipiParametri[i] è "int"
	 * 			allora nomiParametri[i] sarà di tipo int.
	 * @return Artista[]
	 * @throws SQLException
	 */
	public Artista[] ricercaArtista(String[] nomiParametri, String[] tipiParametri, String[] valoriParametri) throws SQLException;
	
	
	/**
	 * ricerca artista su singolo attributo
	 * @param parametro
	 * @param valore
	 * @return Artista[]
	 * @throws SQLException
	 */
	public Artista[] ricercaArtista(String parametro, String valore) throws SQLException;
	
	
	/**
	 * ricerca gli artisti di un determinato tipo
	 * @param String tipo
	 * @return Artista[]
	 * @throws SQLException
	 */
	public Artista[] ricercaArtistaPerTipo(String tipo) throws SQLException;
	
	
	/**
	 * ricerca gli artisti per nazione
	 * @param String nazione
	 * @return Artista[]
	 * @throws SQLException
	 */
	public Artista[] ricercaArtistaPerNazione(String nazione) throws SQLException;
	
	
	/**
	 * ricerca gli artisti per regione
	 * @param String regione
	 * @return Artista[]
	 * @throws SQLException
	 */
	public Artista[] ricercaArtistaPerRegione(String regione) throws SQLException;
	
	
	/**
	 * ricerca gli artisti per città
	 * @param String citta
	 * @return Artista[]
	 * @throws SQLException
	 */
	public Artista[] ricercaArtistaPerCitta(String citta) throws SQLException;
	
	
	/**
	 * ricerca gli artisti per città
	 * @param String cap
	 * @return Artista[]
	 * @throws SQLException
	 */
	public Artista[] ricercaArtistaPerCAP(String cap) throws SQLException;
	
	
	
	/**
	 * ricerca gli artisti per provincia
	 * @param String provincia
	 * @return Artista[]
	 * @throws SQLException
	 */
	public Artista[] ricercaArtistaPerProvincia(String provincia) throws SQLException;
	

}
